﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using ICIA.ARojas.Silverlight.Entities;
using System.Collections.ObjectModel;
using Didsoft.Silverlight.ViewModel;
using Didsoft.Silverlight.ViewModel.Commanding.Contracts;
using ICIA.ARojas.Visual.Observaciones;

namespace ICIA.ARojas.Visual.Destino.ViewModel
{
    public class VmDestinoModal : BindableObject
    {
        private ObservableCollection<ICIA.ARojas.Silverlight.Entities.CursoRealizado> cursos;

        public ObservableCollection<ICIA.ARojas.Silverlight.Entities.CursoRealizado> Cursos
        {
            get { return cursos; }
            set { cursos = value; FirePropertyChanged("Cursos"); }
        }

        private ObservableCollection<ICIA.ARojas.Silverlight.Entities.Destino> destinos;

        public ObservableCollection<ICIA.ARojas.Silverlight.Entities.Destino> Destinos
        {
            get { return destinos; }
            set { destinos = value; FirePropertyChanged("Destinos"); }
        }

        private ICIA.ARojas.Silverlight.Entities.Destino destinoSeleccionado;

        public ICIA.ARojas.Silverlight.Entities.Destino DestinoSeleccionado
        {
            get { return destinoSeleccionado; }
            set { destinoSeleccionado = value; FirePropertyChanged("DestinoSeleccionado"); }
        }

        ICIA.ARojas.Silverlight.WCFClient.DestinoCliente.DestinoNegociosServicioClient destinoServicio = new Silverlight.WCFClient.DestinoCliente.DestinoNegociosServicioClient();
        ICIA.ARojas.Silverlight.WCFClient.CursoRealizadoCliente.CursoRealizadoNegociosServicioClient cursoServicio = new Silverlight.WCFClient.CursoRealizadoCliente.CursoRealizadoNegociosServicioClient();


        private Persona personaSeleccionada;
        public Persona PersonaSeleccionada
        {
            get { return personaSeleccionada; }
            set { personaSeleccionada = value; FirePropertyChanged("PersonaSeleccionada"); }
        }
        
        


        public VmDestinoModal(Persona persona)
        {
            this.PersonaSeleccionada = persona;
            CmdAsignar = new DelegateCommand<string>(CmdAsignar_Execute, CmdAsignar_CanExecute);
            CmdObservaciones = new DelegateCommand<ICIA.ARojas.Silverlight.Entities.Destino>(CmdObservaciones_Execute, CmdObservaciones_CanExecute);

            CmdModificar = new DelegateCommand<ICIA.ARojas.Silverlight.Entities.Destino>(CmdModificar_Execute, CmdModificar_CanExecute);
            

            CargarDestinos();
            CargarCursos();
        }


        public void CargarDestinos()
        {
            IsBusy = true;
            destinoServicio.BuscarPorPersonaIdCompleted += destinoServicio_BuscarPorPersonaIdCompleted;
            destinoServicio.BuscarPorPersonaIdAsync(PersonaSeleccionada.Id);
        }

        public void CargarCursos()
        {
            IsBusy = true;
            cursoServicio.BuscarPorPersonaIdCompleted += cursoServicio_BuscarPorPersonaIdCompleted;
            cursoServicio.BuscarPorPersonaIdAsync(PersonaSeleccionada.Id);
        }


        void cursoServicio_BuscarPorPersonaIdCompleted(object sender, Silverlight.WCFClient.CursoRealizadoCliente.BuscarPorPersonaIdCompletedEventArgs e)
        {
            IsBusy = false;
            cursoServicio.BuscarPorPersonaIdCompleted -= cursoServicio_BuscarPorPersonaIdCompleted;
            if (e.Error == null)
                Cursos = e.Result;
            else
                Didsoft.Silverlight.ContentManager.ExceptionMessage.Show(e.Error.Message);

        }

        void destinoServicio_BuscarPorPersonaIdCompleted(object sender, Silverlight.WCFClient.DestinoCliente.BuscarPorPersonaIdCompletedEventArgs e)
        {
            IsBusy = false;

            destinoServicio.BuscarPorPersonaIdCompleted -= destinoServicio_BuscarPorPersonaIdCompleted;
            if (e.Error == null)
                Destinos = e.Result;
            else
                Didsoft.Silverlight.ContentManager.ExceptionMessage.Show(e.Error.Message);
        }


        #region comandos

        public ICommandEvent CmdAsignar { get; set; }
        void CmdAsignar_Execute(string param)
        {            
            AsignarDestinoModal modal = new AsignarDestinoModal(PersonaSeleccionada);
            modal.Closed += new EventHandler(modal_Closed);
            modal.Show();
        }
        
        bool CmdAsignar_CanExecute(string param)
        {
            return true;
        }


        void modal_Closed(object sender, EventArgs e)
        {
            CargarDestinos();
        }



        public ICommandEvent CmdObservaciones { get; set; }
        void CmdObservaciones_Execute(ICIA.ARojas.Silverlight.Entities.Destino param)
        {
            VwObservacionesModal modalObservaciones = new VwObservacionesModal(param);
            modalObservaciones.Show();
        }

        bool CmdObservaciones_CanExecute(ICIA.ARojas.Silverlight.Entities.Destino param)
        {
            return param != null;
        }



        public ICommandEvent CmdModificar { get; set; }
        void CmdModificar_Execute(ICIA.ARojas.Silverlight.Entities.Destino param)
        {
            AsignarDestinoModal modal = new AsignarDestinoModal(PersonaSeleccionada, DestinoSeleccionado);
            modal.Closed += new EventHandler(modal_Closed);
            modal.Show();
        }

        bool CmdModificar_CanExecute(ICIA.ARojas.Silverlight.Entities.Destino param)
        {
            return param != null;
        }


        #endregion
    }
}
